#include "RR.h"
#include <stdio.h>
#include <stdlib.h>

/**
 * 函数: calculateTimes
 * 功能: 根据时间片轮转调度算法计算每个进程的完成时间、周转时间和等待时间
 *
 * 参数:
 *  - processes: 指向包含多个进程信息的数组
 *  - n: 进程数量
 *  - time_slice: 时间片长度
 *
 * 描述:
 *  计算进程的完成时间，周转时间和等待时间并存在结构体中即可
 */
void
calculateTimes (Process *processes, int n, int time_slice)
{
  int time = 0;
  int completed = 0;

  while (completed < n) {
      for (int i = 0; i < n; i++) {
          if (processes[i].arrival_time <= time && processes[i].remaining_time > 0) {
              if (processes[i].remaining_time <= time_slice) {
                  time += processes[i].remaining_time;
                  processes[i].remaining_time = 0;
                  processes[i].completion_time = time;
                  processes[i].turnaround_time = processes[i].completion_time - processes[i].arrival_time;
                  processes[i].waiting_time = processes[i].turnaround_time - processes[i].burst_time;
                  completed++;
              } else {
                  time += time_slice;
                  processes[i].remaining_time -= time_slice;
              }
          }
      }
  }
}
